package cn.jtool.dig.server.service.impl;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.jtool.dig.server.dao.entity.UserInfo;
import cn.jtool.dig.server.dao.repository.UserInfoRepository;
import cn.jtool.dig.server.domain.dto.UserInfoDto;
import cn.jtool.dig.server.domain.reqeust.LoginParams;
import cn.jtool.dig.server.service.SessionService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Slf4j
@Service
public class SessionServiceImpl implements SessionService {

    @Resource
    private UserInfoRepository userInfoRepository;

    public UserInfoDto login(LoginParams params){
        Example<UserInfo> example = Example.of(UserInfo.builder().loginName(params.getLoginName()).build());
        Optional<UserInfo> userInfo = this.userInfoRepository.findOne(example);
        if(userInfo.isEmpty()){
            throw new RuntimeException("用户不存在");
        }
        if(!StringUtils.equals(userInfo.get().getLoginPassword(), params.getLoginPassword())){
            throw new RuntimeException("密码错误");
        }
        StpUtil.login(userInfo.get().getId());
        UserInfoDto userInfoDto = UserInfoDto.builder().token(StpUtil.getTokenValue()).loginName(params.getLoginName()).nickName("管理员").avatar("https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif").build();
        StpUtil.getSession().set(SaSession.USER, userInfoDto);
        return userInfoDto;
    }

    @Override
    public UserInfoDto info(int accountId) {
        StpUtil.checkLogin();
        return StpUtil.getSession().getModel(SaSession.USER, UserInfoDto.class);
    }

    @Override
    public void logout(int accountId) {
        StpUtil.logout(accountId);
    }
}
